/**
 * 表单验证工具
 * 提供常用的验证规则
 */

import type { Rule } from 'ant-design-vue/es/form'

/**
 * 邮箱格式验证
 */
export const emailRule: Rule = {
  type: 'email',
  message: '请输入正确的邮箱格式',
}

/**
 * 手机号验证
 */
export const phoneRule: Rule = {
  pattern: /^1[3-9]\d{9}$/,
  message: '请输入正确的手机号',
}

/**
 * 用户名验证（3-20位字母数字下划线）
 */
export const usernameRule: Rule = {
  pattern: /^[a-zA-Z0-9_]{3,20}$/,
  message: '用户名为3-20位字母、数字或下划线',
}

/**
 * 密码强度验证（至少6位）
 */
export const passwordRule: Rule = {
  min: 6,
  message: '密码长度不少于6位',
}

/**
 * 强密码验证（至少8位，包含大小写字母、数字）
 */
export const strongPasswordRule: Rule = {
  pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$/,
  message: '密码至少8位，需包含大小写字母和数字',
}

/**
 * 必填验证
 */
export const requiredRule = (message: string = '此项为必填项'): Rule => ({
  required: true,
  message,
})

/**
 * 长度范围验证
 */
export const lengthRule = (min: number, max: number, message?: string): Rule => ({
  min,
  max,
  message: message || `长度应在 ${min} 到 ${max} 之间`,
})

/**
 * 数字范围验证
 */
export const rangeRule = (min: number, max: number, message?: string): Rule => ({
  type: 'number',
  min,
  max,
  message: message || `数值应在 ${min} 到 ${max} 之间`,
})

/**
 * URL 验证
 */
export const urlRule: Rule = {
  type: 'url',
  message: '请输入正确的URL地址',
}

/**
 * 自定义验证器
 */
export const customValidator = (
  validator: (rule: any, value: any) => Promise<void>
): Rule => ({
  validator,
})
